#include <opencv2/opencv.hpp>
#include <iostream>
int main(int argc, char **argv)
{
    // 读取图片
    // 读取的数据保存在 Mat 类型的变量 image 中, Mat是 opencv 中的图像数据结构，类似 numpy 中的 ndarray
    cv ::Mat image = cv ::imread("c:\\Users\\liuxm\\Desktop\\A.png");
    // 判断图片是否读取成功, 读取不成功, 运行 if 语句直接退出主函数
    if (image.empty())
    {
        std ::cout << "Could not read the image: " << std ::endl;
        return 1;
    }
    // 打印图片宽度和高度
    std ::cout << "图片高度: " << image.rows << "图片宽度: " << image.cols << std ::endl;
    // 打印图片数据
    // 以 numpy 的方式打印
    std ::cout << "图片的 data: " << cv ::format(image, cv ::Formatter ::FMT_NUMPY) << std ::endl;
    // 以 python list 格式输出
    std ::cout << "图片的 data: " << cv ::format(image, cv ::Formatter ::FMT_PYTHON) << std ::endl;
    // 创建一个gray 图
    cv ::Mat gray;
    // 创建一个 hsv 图
    cv ::Mat hsv;
    // 创建一个 rgb 图
    cv ::Mat rgb;
    // BGR --> Gray
    cv ::cvtColor(image, gray, cv ::COLOR_BGR2GRAY);
    // BGR --> HSV
    cv ::cvtColor(image, hsv, cv ::COLOR_BGR2HSV);
    // BGR --> RGB
    cv ::cvtColor(image, rgb, cv ::COLOR_BGR2RGB);
    // 保存 gray 图: 格式: (文件路径, Mat 矩阵变量)
    cv ::imwrite("./output/gray.jpg", gray);
    // 显示图片
    // cv :: imshow("图片", image);
    // 等待按键
    // cv :: waitKey(0);
    // 显示多张图片, 同时出现在两个窗口
    // cv :: imshow("原图", image);
    // cv :: imshow("灰度图", gray);
    // cv :: waitKey(0);
    return 0;
}